package utils;

import java.io.File;
import comun.MyException;
import persistencia.Persistencia;
import persistencia.dominio.Archivo;
import persistencia.dominio.Carpeta;
import java.util.Iterator;
import java.util.Vector;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

public class ManejoStringEnArchivos {

  public ManejoStringEnArchivos() {
  }
  
  public static void renombrandoTodo(){
	renombrarCarpetasYArchivosFisicamente("/usr/share/tomcat5/server/webapps/siat2/archivos/");
	renombrandoCarpetasYArchivosBaseDeDatos();
 }

  /**
   * Elimina los simbolos no permitidos de los nombres de los archivos FISICAMENTE.
   * Se hara una sola vez y es para acomodar los archivos y carpetas que estan en el servidor.
   * @param string
   * @return
   */
  public static void renombrarCarpetasYArchivosFisicamente(String path){
	  String pathCompletoOriginal = "";
	  String pathCompletoModificado = "";
	  String nombreRenombrado = "";
	  
	  File f = new File(path);
	  String [] lista = f.list();
	  
	  for (int i = 0; i < lista.length; i++){
		  String nombreDeCarpetaOArchivo = lista[i];
		  pathCompletoOriginal = path+nombreDeCarpetaOArchivo;
		  File file = new File(pathCompletoOriginal);
		  
		  if(file.isDirectory())renombrarCarpetasYArchivosFisicamente(pathCompletoOriginal+"/");
		  
		  nombreRenombrado = ManejoString.eliminarCaractaresRarosParaBase_sin_barras(nombreDeCarpetaOArchivo);
		  		  
		  if(nombreDeCarpetaOArchivo.compareTo(nombreRenombrado)!=0){
			  System.out.println("Renombrando...fisicamente es carpeta("+file.isDirectory()+") (ANTES,AHORA)=>("+nombreDeCarpetaOArchivo+","+nombreRenombrado+")");
			  pathCompletoModificado = path+nombreRenombrado;
			  file.renameTo(new File(pathCompletoModificado));
		  }
	  }	  
  }
  
  /**
   * Elimina los simbolos no permitidos de los nombres de los archivos BASE DE DATOS.
   * Se hara una sola vez y es para acomodar la base de datos.
   * @param string
   * @return
   */
  public static void renombrandoCarpetasYArchivosBaseDeDatos(){
	  Persistencia persistencia = new Persistencia();
	  try {
		  String nombreArchivoRenombrado = "";
		  String nombrePathArchivoRenombrado = "";
		  String nombreCarpeta = "";
		  
		  persistencia.crearTransaccion();
		  
		  Vector carpetas = persistencia.getObjectosPorClase("persistencia.dominio.Carpeta");
		  for (Iterator iter = carpetas.iterator(); iter.hasNext();) {
			  Carpeta carpeta = (Carpeta) iter.next();
			  
			  nombreCarpeta = ManejoString.eliminarCaractaresRarosParaBase_sin_barras(carpeta.getNombre());
			  if(nombreCarpeta!= null && carpeta.getNombre().compareTo(nombreCarpeta)!=0){
				  System.out.println("Renombrando carpeta base de datos...(ANTES,AHORA)=>("+carpeta.getNombre()+","+nombreCarpeta+")");
				  carpeta.setNombre(nombreCarpeta);
			  }
		  }
		  
		  Vector archivos = persistencia.getObjectosPorClase("persistencia.dominio.Archivo");
		 	  
		  for (Iterator iterator = archivos.iterator(); iterator.hasNext();) {
			  Archivo archivo = (Archivo) iterator.next();
			  
			  nombreArchivoRenombrado = ManejoString.eliminarCaractaresRarosParaBase_sin_barras(archivo.getNombre());
			  if(nombreArchivoRenombrado!= null && archivo.getNombre().compareTo(nombreArchivoRenombrado)!=0){
				  System.out.println("Renombrando...nombre archivo base de datos...(ANTES,AHORA)=>("+archivo.getNombre()+","+nombreArchivoRenombrado+")");
				  archivo.setNombre(nombreArchivoRenombrado);
			  }
			  
			  nombrePathArchivoRenombrado = ManejoString.eliminarCaractaresRarosParaBase_sin_barras(archivo.getPath());
			  if(nombrePathArchivoRenombrado!= null && archivo.getPath().compareTo(nombrePathArchivoRenombrado)!=0){
				  System.out.println("Renombrando...nombre path archivo base de datos...(ANTES,AHORA)=>("+archivo.getPath()+","+nombrePathArchivoRenombrado+")");
			  	  archivo.setPath(nombrePathArchivoRenombrado);
			  }
		  }
		  
		  persistencia.commit();
	  }catch (MyException e) {
		  // TODO Auto-generated catch block
		  e.printStackTrace();
		  persistencia.rollback();
	  }
  } 

}